using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;

namespace Rogue
{

    // Eventually replace this with something more complicated? The idea is that this is for armor/buffs
    // that only affect a certain type of damage. Eg. "protection against cutting attacks", "boosts bash damage"
    public enum DamageType
    {
        Bash, 
        Cut,
        // what else is there? The roguelike cliche of fire/ice/poison damage...
    }

    // The 'shared' (immutable) parts of an attack move. There's only one Attack for "bite", one for "punch", etc.
    // Should the basedamage amount be split out of this? If so, where should it come from?
    public class Attack
    {
        public Attack(string a_YouVerb, string a_HeVerb, string a_Conferrer, int a_BaseDamage, DamageType a_Type, Priority a_Priority)
        {
            m_YouVerb = a_YouVerb;
            m_HeVerb = a_HeVerb;
            m_BaseDamage = a_BaseDamage;
            m_Type = a_Type;
            m_Priority = a_Priority;
            m_Conferrer = a_Conferrer;
        }

        // attacks know how useful they are when they're randomly picked.
        // An attack of higher priority is always picked first.
        public enum Priority
        {                   // eg:
            LastResort,     // push
            Low,            // kick
            Normal,         // use weapon
            High            // use charged attack or other not-normally-available context sensitive special stuff
        }

        public int GetTotalDamage()
        {
            // TODO: include buffs and armor and such? have type filters?
            return m_BaseDamage;
        }

        public string m_YouVerb;
        public string m_HeVerb;
        public int m_BaseDamage;
        public DamageType m_Type;
        public Priority m_Priority;
        public string m_Conferrer;        // a bodypart name, or a weapon or something
    };

    // the per-instance parts of an attack. Includes the attacker, victim, per-instance buffs, etc.
    // not really needed or passed around yet.
    public class Damage
    {
        Damage(Entity a_Attacker, Attack a_Attack, Entity a_Victim, BodyPart a_VictimPart)
        {

        }
    };

    // TODO: damage reporter does the console output for a fight
}